package cn.bearspark.happening.provider.dao.mapper;

import cn.bearspark.happening.provider.dao.po.VoteUserPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * 投票用户的数据映射对象
 *
 * @author f
 */
@Mapper
public interface VoteUserMapper {

    /**
     * 批量添加投票的用户数据
     *
     * @param voteId       投票的 id
     * @param voterId      投票的用户的用户 id
     * @param optionIdList 投票的选项的 id 集合
     * @param anonymous    是否匿名投票
     */
    void insertBatch(long voteId, long voterId, List<Integer> optionIdList, int anonymous);

    /**
     * 查询在指定投票中指定用户投票的选项
     *
     * @param voteId  指定的投票 id
     * @param voterId 指定投票者的用户 id
     * @return 投票的选项 id，以 Set 的形式返回
     */
    @Select("SELECT option_id FROM t_vote_user WHERE vote_id = #{voteId} AND voter_id = #{voterId}")
    Set<Integer> getOptionIdSet(long voteId, long voterId);

    /**
     * 查询在指定投票中指定用户的投票信息
     *
     * @param voteId     指定投票的 id
     * @param userIdList 指定用户的 id 集合
     * @param publicCode 非匿名投票的枚举值
     * @return 在指定投票中指定用户的投票信息
     */
    List<VoteUserPO> listSelectedOption(long voteId, List<Long> userIdList, int publicCode);

    /**
     * 统计指定投票的票数
     *
     * @param voteId 指定投票的 id
     * @return 指定投票的票数
     */
    @Select("SELECT COUNT(*) FROM t_vote_user WHERE vote_id = #{voteId}")
    long countVoteTotalNum(long voteId);
}
